import React from "react";
import { useFormField } from "../../context/form-context";
import { useForm } from "../../context/metadata-context";
import get from "lodash/get";
import set from "lodash/set";
import request from "../../utils/request";
import { openWin } from "../../utils";
import { useInject } from "../../context/inject-context";

let defaultConfig = {
  //这一批属性来源 tplData.form.data_control （步骤权限）
  // "code": "chaolianjie",
  // "name": "超链接",
  // "type": "hyperlink",
  // "is_show": true,
  // "is_editable": false,
  // "is_required": false,

  //这一批属性来源 tplData.form.form_meta_data （表单设计器）
  // "isUsed": false,
  // "designProps": {
      // "code": "chaolianjie",
      // "name": "超链接",
      // "ui": "wfd_hyperlink",
      // "title": "超链接",
      // "layout": "control_layout_leftRight",
      // "defaultValue": "",
      // "groupTitle": "",
      // "byTableGroupTitle": false,
      // "title_w": 85,
      // "configs": [
      //     [
      //         "百度",
      //         "pc.com",
      //         "mobile.com"
      //     ]
      // ],
      // "source_type": "fixd_value"
  // },
  
  //这一批属性来源 tplData.form.data_define （业务对象）
  // "show_type": "",
  // "show_type_name": "",
  // "props": {
      // "source_type": "fixd_value",
      // "configs": [
      //     [
      //         "百度",
      //         "pc.com",
      //         "mobile.com"
      //     ]
      // ]
  // },
  // "type_name": "超链接",

  //来源 tplData.form.defaultValueConf
  // "default": null
}

export default function ({ id, field, label, rules, showLabel = false, onChange, onBlur, displayFormatter, valueFormatter, required,cell,rowIndex, isSubTableField, rangePath, sourcePath, group, ...others }) {
  const { input, property, validation, readonly, className } = useFormField({
    field,
    rules,
    onChange,
    displayFormatter,
    valueFormatter,
    onBlur,
  });
  const { isDisplay, data: tplData , params, csrfToken} = useForm().root;
  //合计里面不显示超链接
  const injectInfo= useInject()
  if(injectInfo?.prefixStr){
    return null
  }
  if(cell.code == "zbcl1"){
    console.log(tplData)
  }
  
  //如果value是数组，说明是同步业务数据或者后端计算，改变了range
  if (Array.isArray(input.value)) {
    if(Array.isArray(input.value[0])){
      
    }else{//防止后端给了垃圾数据
      console.log("超链接产生了不符合要求的格式数据", input.value);
      input.value = [];
    }

    //更新选项
    set(tplData, rangePath, input.value);
    set(tplData, sourcePath, input.value);
    input.onChange(null);//超链接字段的值，不能存在
  }

  //返回超链接信息
  function renderLink() {
    let linkItems = [];
    linkItems = get(tplData, sourcePath);//查找关键字链接配置
    if(!linkItems){
      linkItems = get(tplData, rangePath);//查找固定值超链接配置
    }
    if(!linkItems || linkItems?.length === 0){//如果没有超链接数据源，返回null
      return null;
    }

    //拿到当前字段超链接隐藏结果
    let linkHidden = cell.linkHidden;//当前字段的条件隐藏结果，在rule.js里面计算得到
    if(linkHidden && isSubTableField){//如果是子表
      linkHidden = linkHidden[rowIndex];//根据索引找到对应行的隐藏结果
    }
    let propsConfig = cell.props.configs;//业务对象配置的超链接信息，数值类型，数组第一个值是原始linkName
    
    return linkItems.map(function (link, index) {

      //处理条件隐藏
      if(linkHidden){//包含条件隐藏，根据条件结果判断是否显示
        let isLinkHidden = false;

        if(linkHidden.length !== undefined){//如果条件计算结果为数组，根据索引进行隐藏，这里兼容历史数据
          isLinkHidden = linkHidden[index];//根据索引找结果
        }else{//根据linkName判断当前链接是否要显示
          let configLinkName = propsConfig[index][0];//当前链接对应的linkName
          isLinkHidden = linkHidden[configLinkName];//根据linkName找结果
        }

        if(isLinkHidden){//链接隐藏条件满足，返回null
          return null;
        }
      }

      //链接隐藏条件不满足，返回链接dom
      return (
        <a 
          key={index} 
          data-pclink={link[1]} data-mobilelink={link[2] ? link[2] : ""} 
          className="mr-4 leading-snug hover:underline field-hyperlink" 
          onClick={(e) => {
            handleLinkClick({
              openUrl: link[1],
              e: e,
              tplData: tplData,
              params: params
            })
          }}
        >
          {link[0]}
        </a>
      );
    });
  }

  return renderLink();
}


//超链接打开事件
function handleLinkClick({
  openUrl,
  e,
  tplData,
  params
}) {
  e.preventDefault();
  //核心erp
  if (tplData.form.form_data.appInfo.api_adapter_id == "ae56a07dc20b485891e058a719c2e8a5") {
    openWin(openUrl);
  } else {
    request({
      url: "/flowcenter/form-ctrl/build-authed-url", //根据url获取带token的超链接
      method: "POST",
      isForm: true,
      data: {
        mode: 0,
        originUrl: openUrl,
        business_id: params.business_id,
        proc_id: tplData.ProcessInfo.ProcessGuid,
        package_id: params.package_id
      }
    }).then(function (data) {
      if (data.code == 1 && data.data) {
        openWin(data.data);
      }
    });
  }
}